Update GUI to internal release 0.2.2.20.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 6 Dec 2005 00:38:08 +0000 (00:38 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 6 Dec 2005 00:38:08 +0000 (00:38 +0000)
gpsbabel/win32/gui-2/GPSBabelGUI.dpr
gpsbabel/win32/gui-2/main.dfm
gpsbabel/win32/gui-2/main.pas

index dd78f1bdef0349070b8877f7060789acc926d163..467528f5949075b8f6946e493123d904e5931abf 100644 (file)
@@ -19,6 +19,8 @@ program GPSBabelGUI;
 \r
 uses\r
   gnugettext in 'gnugettext.pas',\r
+  gnugettextDx in 'gnugettextDx.pas',\r
+  delphi in 'delphi.pas',\r
   Windows,\r
   SysUtils,\r
   classes,\r
@@ -29,7 +31,8 @@ uses
   filter in 'filter.pas' {frmFilter},\r
   about in 'about.pas' {frmAbout},\r
   readme in 'readme.pas' {frmReadme},\r
-  options in 'options.pas' {frmOptions};\r
+  options in 'options.pas' {frmOptions},\r
+  select in 'select.pas' {frmSelect};\r
 \r
 {$R *.RES}\r
 \r
index 88c81da4d434c482f55634d2cf45f09f7d5d9461..1fd4caa343f705d11d99d0e9452c1da203252553 100644 (file)
Binary files a/gpsbabel/win32/gui-2/main.dfm and b/gpsbabel/win32/gui-2/main.dfm differ
index 24820b7dc2410092afdc6f3013e64de4ac2059ce..b0ebe3eb477afcc7ae7c4664b2804ff63e3c7d39 100644 (file)
@@ -21,7 +21,7 @@ unit main;
 interface\r
 \r
 uses\r
-  TypInfo, gnugettext, gnugettextDx,\r
+  gnugettext, TypInfo, delphi, \r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
   StdCtrls, Buttons, ExtCtrls,\r
   common, utils, ImgList, ActnList, Menus, ComCtrls, ToolWin;\r
@@ -112,6 +112,11 @@ type
     acFileChangeLanguage: TAction;\r
     Changelanguage1: TMenuItem;\r
     N5: TMenuItem;\r
+    acFileExportCSV: TAction;\r
+    Createoptionscsv1: TMenuItem;\r
+    File1: TMenuItem;\r
+    Createoptionscsv2: TMenuItem;\r
+    sdOptional: TSaveDialog;\r
     procedure FormShow(Sender: TObject);\r
     procedure FormCreate(Sender: TObject);\r
     procedure OpenButtonClick(Sender: TObject);\r
@@ -148,6 +153,9 @@ type
     procedure acFileOutputToScreenExecute(Sender: TObject);\r
     procedure acDebugCreatePoExecute(Sender: TObject);\r
     procedure acFileChangeLanguageExecute(Sender: TObject);\r
+    procedure acFileExportCSVExecute(Sender: TObject);\r
+    procedure cbOutputDeviceChange(Sender: TObject);\r
+    procedure cbInputDeviceChange(Sender: TObject);\r
   private\r
     { Private-Deklarationen }\r
     FCaps: TCapabilities;\r
@@ -155,6 +163,7 @@ type
     FLang: TStringList;\r
     FFirstShow: Boolean;\r
     FOutHandmade: Boolean;\r
+    FFmtIn, FFmtOut: string;\r
     procedure AddToOutput(const Str: string);\r
     procedure AddToOutputFmt(const Format: string; const Args: array of const);\r
     procedure ComboBoxChanged(const Format: string; IsInput, IsFile: Boolean);\r
@@ -162,11 +171,13 @@ type
     procedure EnableOptions(const Version: string);\r
     function HandleOptions(const Format: string; AObject: TObject; IsInput: Boolean): Boolean;\r
     function HandleOptionsDlg(const Format: string; var str: string; IsInput: Boolean): Boolean;\r
+    procedure HandleParams;\r
     procedure HistoryChanged(Box: TComboBox; Swap: Boolean = False);\r
     procedure InitCombo(Target: TComboBox; IsInput, ForDevice: Boolean);\r
     procedure LoadLanguages;\r
     procedure LoadFileFormats;\r
     procedure LoadVersion;\r
+    procedure RefreshDesign(FirstTime: Boolean = False);\r
     procedure WMOPTIONSCHANGED(var Msg: TMessage); message WM_OPTIONS_CHANGED;\r
     procedure WMSTARTUP(var Msg: TMessage); message WM_STARTUP;\r
     procedure StoreProfiles;\r
@@ -180,7 +191,7 @@ var
 implementation\r
 \r
 uses\r
-  filter, about, readme, options;\r
+  filter, about, readme, options, select;\r
 \r
 {$R *.DFM}\r
 \r
@@ -211,16 +222,10 @@ end;
 \r
 { TfrmMain }\r
 \r
-procedure TfrmMain.FormCreate(Sender: TObject);\r
+procedure TfrmMain.RefreshDesign(FirstTime: Boolean);\r
 begin\r
-  TP_Ignore(mnuDebug, 'mnuDebug');\r
-{$IFOPT D-}\r
-  mnuDebug.Visible := False;\r
-{$ENDIF}\r
-  TranslateComponent(SELF);\r
-  LoadLanguages;\r
-\r
-  FFirstShow := True;\r
+  if not(FirstTime) then\r
+    ReTranslateComponent(SELF);\r
 \r
 // VS_FF_DEBUG The file contains debugging information or is compiled with debugging features enabled.\r
 // VS_FF_INFOINFERRED  The file's version structure was created dynamically;\r
@@ -243,20 +248,6 @@ begin
   else if (CFixedFileinfo.dwFileFlags and VS_FF_SPECIALBUILD <> 0) then\r
     Caption := Format('%s (%s)', [Caption, _('Special release')]);\r
 \r
-  memoOutput.Lines.Clear;\r
-\r
-  FCaps := TCapabilities.Create;\r
-  FOpts := TOptions.Create(FCaps);\r
-\r
-  OpenDialog.InitialDir := ReadProfile(OpenDialog.Tag);\r
-  SaveDialog.InitialDir := ReadProfile(SaveDialog.Tag);\r
-\r
-  if not ComboBoxSelect(cbInputDevice, ReadProfile(cbInputDevice.Tag)) then\r
-    cbInputDevice.ItemIndex := 0;\r
-\r
-  if not ComboBoxSelect(cbOutputDevice, ReadProfile(cbOutputDevice.Tag)) then\r
-    cbOutputDevice.ItemIndex := 0;\r
-\r
   FixAlign(sbOpenFile, 8);\r
   FixAlign(sbSaveFile, 8);\r
   FixAlign(edInputFile, 8, sbOpenFile);\r
@@ -275,6 +266,44 @@ begin
   FixAlign(btnProcess, 8);\r
   FixAlign(btnFilter, 16, btnProcess);\r
 \r
+  gbInput.Caption := '>>> ' + _('Input');\r
+  gbOutput.Caption := '<<< ' + _('Output');\r
+  chbInputDevice.Caption := '[' + chbInputDevice.Caption + ']';\r
+  chbOutputDevice.Caption := '[' + chbOutputDevice.Caption + ']';\r
+\r
+  acOptionsSourceFormat.Caption := _('Input') + ': ' + FFmtIn;\r
+  acOptionsTargetFormat.Caption := _('Output') + ': ' + FFmtOut;\r
+\r
+  btnInputOpts.Caption := '';\r
+  btnOutputOpts.Caption := '';\r
+end;\r
+\r
+procedure TfrmMain.FormCreate(Sender: TObject);\r
+begin\r
+  MakeFirstTranslation(Self);\r
+\r
+  FFirstShow := True;\r
+\r
+  TP_Ignore(mnuDebug, 'mnuDebug');\r
+{$IFOPT D-}\r
+  mnuDebug.Visible := False;\r
+{$ENDIF}\r
+  LoadLanguages;\r
+\r
+  memoOutput.Lines.Clear;\r
+\r
+  FCaps := TCapabilities.Create;\r
+  FOpts := TOptions.Create(FCaps);\r
+\r
+  OpenDialog.InitialDir := ReadProfile(OpenDialog.Tag);\r
+  SaveDialog.InitialDir := ReadProfile(SaveDialog.Tag);\r
+\r
+  if not ComboBoxSelect(cbInputDevice, ReadProfile(cbInputDevice.Tag)) then\r
+    cbInputDevice.ItemIndex := 0;\r
+\r
+  if not ComboBoxSelect(cbOutputDevice, ReadProfile(cbOutputDevice.Tag)) then\r
+    cbOutputDevice.ItemIndex := 0;\r
+\r
   edInputFile.Text := ReadProfile(edInputFile.Tag);\r
 \r
   cbInputLang.ItemIndex := 0;\r
@@ -282,11 +311,8 @@ begin
 \r
   Application.OnIdle := Self.DoOnIdle;\r
 \r
-  gbInput.Caption := '>>> ' + _('Input');\r
-  gbOutput.Caption := '<<< ' + _('Output');\r
-\r
-  chbInputDevice.Caption := '[' + chbInputDevice.Caption + ']';\r
-  chbOutputDevice.Caption := '[' + chbOutputDevice.Caption + ']';\r
+  RefreshDesign(True);\r
+  HandleParams;\r
 end;\r
 \r
 procedure TfrmMain.LoadLanguages;\r
@@ -294,7 +320,8 @@ begin
   FLang := TStringList.Create;\r
 \r
   DefaultInstance.GetListOfLanguages('default', FLang);\r
-  if (FLang.IndexOf('en') < 0) then FLang.Add('en');\r
+  if (FLang.IndexOf('en') < 0) then\r
+    FLang.Add('en');\r
   acFileChangeLanguage.Visible := (FLang.Count > 1);\r
 end;\r
 \r
@@ -404,12 +431,14 @@ begin
 \r
   if IsInput then\r
   begin\r
+    FFmtIn := Format;\r
     wptInputOK.Enabled := (caps and 1 <> 0);\r
     trkInputOK.Enabled := (caps and 4 <> 0);\r
     rteInputOK.Enabled := (caps and 16 <> 0);\r
   end\r
     else\r
   begin\r
+    FFmtOut := Format;\r
     wptOutputOK.Enabled := (caps and 2 <> 0);\r
     trkOutputOK.Enabled := (caps and 8 <> 0);\r
     rteOutputOK.Enabled := (caps and 32 <> 0);\r
@@ -461,6 +490,9 @@ end;
 procedure TfrmMain.CheckInput;\r
 begin\r
   acConvert.Enabled :=\r
+  (cbWaypoints.Checked or cbRoutes.Checked or cbTracks.Checked)\r
+  and\r
+   (\r
     ((chbInputDevice.Checked and\r
     (cbInputDevice.Text <> '') and\r
     (cbInputFormatDevice.Text <> ''))\r
@@ -475,7 +507,8 @@ begin
   or\r
     (not(chbOutputDevice.Checked) and\r
     (edOutputFile.Text <> '') and\r
-    (cbOutputFormat.Text <> '')));\r
+    (cbOutputFormat.Text <> '')))\r
+   );\r
 end;\r
 \r
 procedure TfrmMain.edOutputFileChange(Sender: TObject);\r
@@ -638,9 +671,9 @@ begin
     s := 'gpsbabel.exe ' + cmdline;\r
     AddToOutput(s);\r
 \r
+    CSave := Cursor;\r
     list := TStringList.Create;\r
     try\r
-      CSave := Cursor;\r
       Cursor := crHourGlass;\r
       Application.ProcessMessages;\r
       Sleep(50);\r
@@ -793,6 +826,7 @@ begin
     cbInputDevice.Visible := True;\r
     cbInputFormatDevice.Visible := True;\r
     lbInputFile.Caption := _('Port');\r
+    FFmtIn := cbInputFormatDevice.Text;\r
   end\r
     else\r
   begin\r
@@ -803,7 +837,10 @@ begin
     cbInputDevice.Visible := False;\r
     sbOpenFile.Visible := True;\r
     lbInputFile.Caption := _('File');\r
+    FFmtIn := cbInputFormat.Text;\r
   end;\r
+  acOptionsSourceFormat.Caption := _('Input') + ': ' + FFmtIn;\r
+  acOptionsSourceFormat.Enabled := (FOpts.FormatOpts(FFmtIn) <> nil);\r
   CheckInput;\r
 end;\r
 \r
@@ -844,6 +881,7 @@ begin
     sbSaveFile.Visible := False;\r
     cbOutputFormat.Visible := False;\r
     lbOutputFile.Caption := _('Port');\r
+    FFmtOut := cbOutputFormatDevice.Text;\r
   end\r
     else\r
   begin\r
@@ -853,12 +891,17 @@ begin
    cbOutputDevice.Visible := False;\r
     cbOutputFormatDevice.Visible := False;\r
     lbOutputFile.Caption := _('File');\r
+    FFmtOut := cbOutputFormat.Text;\r
   end;\r
+  acOptionsTargetFormat.Caption := _('Output') + ': ' + FFmtOut;\r
+  acOptionsTargetFormat.Enabled := (FOpts.FormatOpts(FFmtOut) <> nil);\r
   CheckInput;\r
 end;\r
 \r
 procedure TfrmMain.acHelpReadmeExecute(Sender: TObject);\r
 begin\r
+  if (frmReadme = nil) then\r
+    Application.CreateForm(TfrmReadme, frmReadme);\r
   frmReadme.ShowModal;\r
 end;\r
 \r
@@ -1021,10 +1064,12 @@ begin
     HistoryChanged(edOutputFile);\r
     edOutputFile.Text := '-';\r
     edOutputFile.Enabled := False;\r
+    edOutputFile.Color := clInactiveBorder;\r
     sbSaveFile.Enabled := False;\r
   end\r
     else\r
   begin\r
+    edOutputFile.Color := edInputFile.Color;\r
     chbOutputDevice.Enabled := True;\r
     edOutputFile.Enabled := True;\r
     HistoryChanged(edOutputFile, True);\r
@@ -1033,6 +1078,24 @@ begin
   CheckInput;\r
 end;\r
 \r
+procedure TfrmMain.HandleParams;\r
+var\r
+  i: Integer;\r
+  s: string;\r
+begin\r
+  for i := 1 to ParamCount do\r
+  begin\r
+    s := ParamStr(i);\r
+    if (i = 0) then\r
+      edInputFile.Text := s\r
+    else begin\r
+      if (i = 1) then\r
+        edInputFile.Items.Add(edInputFile.Text);\r
+      edInputFile.Items.Add(s);\r
+    end;\r
+  end;\r
+end;\r
+\r
 procedure TfrmMain.HistoryChanged(Box: TComboBox; Swap: Boolean);\r
 var\r
   index: Integer;\r
@@ -1057,16 +1120,22 @@ var
   i, j, len: Integer;\r
   s: string;\r
   f: TFileStream;\r
+\r
+  procedure WriteLn(Str: string);\r
+  begin\r
+    Str := Str + #13#10;\r
+    f.Write(PChar(Str)^, Length(Str));\r
+  end;\r
+\r
 begin\r
   l := TStringList.Create;\r
   try\r
     FOpts.DebugGetHints(l);\r
-    f := TFileStream.Create('options\options.inc', fmCreate);\r
+    f := TFileStream.Create('..\gpsbabel.po', fmCreate);\r
     try\r
-      s := '{gnugetext: scan-all text-domain=''options''}'#13#10#13#10;\r
-      f.Write(PChar(s)^, Length(s));\r
-      s := 'const'#13#10;\r
-      f.Write(PChar(s)^, Length(s));\r
+      WriteLn('msgid ""');\r
+      WriteLn('msgstr ""');\r
+      WriteLn('');\r
 \r
       for i := 0 to l.Count - 1 do\r
       begin\r
@@ -1074,17 +1143,15 @@ begin
         len := Length(s);\r
         for j := len downto 1 do\r
         begin\r
-          if (s[j] = '''') then\r
+          if (s[j] = '"') then\r
           begin\r
-            Insert('''', s, j);\r
+            Insert('\', s, j);\r
           end;\r
         end;\r
-        s := Format('resourcestring option_%d=''%s'';'#13#10, [i, s]);\r
-        f.Write(PChar(s)^, Length(s));\r
+        WriteLn('msgid "' + s + '"');\r
+        WriteLn('msgstr ""');\r
+        WriteLn('');\r
       end;\r
-\r
-      s := #13#10'{gnugettext: reset }'#13#10;\r
-      f.Write(PChar(s)^, Length(s));\r
     finally\r
       f.Free;\r
     end;\r
@@ -1095,15 +1162,148 @@ end;
 \r
 procedure TfrmMain.acFileChangeLanguageExecute(Sender: TObject);\r
 var\r
-  i: Integer;\r
-  s: string;\r
+  lang: string;\r
+  form: TForm;\r
+  title: string;\r
 begin\r
-  for i := 0 to FLang.Count - 1 do\r
+  Title := _('Choose language') + ' ' + _('for GUIBabelGUI');\r
+  if SelectLanguage(Title, FLang, lang) and\r
+    (CompareText(lang, Copy(GetCurrentLanguage, 1, 2)) <> 0) then\r
   begin\r
-    s := FLang.Strings[i];\r
-    if (s = '') then\r
-      Halt(1);\r
+    StoreProfile(11, lang);\r
+    UseLanguage(lang);\r
+    RefreshDesign;\r
+    form := frmFilter;\r
+    frmFilter := nil;\r
+    if (Form <> nil) then Form.Release;\r
+    form := frmReadme;\r
+    frmReadme := nil;\r
+    if (Form <> nil) then Form.Release;\r
+    form := frmAbout;\r
+    frmAbout := nil;\r
+    if (Form <> nil) then Form.Release;\r
   end;\r
 end;\r
 \r
+procedure TfrmMain.acFileExportCSVExecute(Sender: TObject);\r
+const\r
+  init_dir: string = '';\r
+  file_name: string = 'gpsbabel.csv';\r
+var\r
+  i, j, len: Integer;\r
+  s, lang, curr_lang: string;\r
+  o: POption;\r
+  f: TFileStream;\r
+  l: TStrings;\r
+\r
+  function _translate(const Domain, MsgID: string): WideString;\r
+  var\r
+    i: Integer;\r
+    tmp: WideString;\r
+    boo: Boolean;\r
+  begin\r
+    tmp := MsgID;\r
+    Result := dgettext(Domain, tmp);\r
+    if (Result = tmp) then\r
+      Result := _(MsgID);\r
+    if (Result = tmp) then\r
+      Result := ''\r
+    else begin\r
+      boo := False;\r
+      i := Length(Result);\r
+      while (i >= 1) do\r
+      begin\r
+        if (Result[i] = '"') then\r
+        begin\r
+          Insert('"', Result, i);\r
+          boo := True;\r
+        end;\r
+        Dec(i);\r
+      end;\r
+      if (boo) then\r
+      begin\r
+        memoOutput.Lines.Add('Warning: ''"'' found in translation!');\r
+        memoOutput.Lines.Add(Result);\r
+      end;\r
+    end;\r
+  end;\r
+\r
+  procedure _line(const Prefix, MsgID: string);\r
+  begin\r
+    UniWriteLn(f, Prefix + ',"' + MsgID + '","' +\r
+                  _translate(GPSBabel_Domain, MsgID) + '"');\r
+  end;\r
+\r
+begin\r
+  if not SelectLanguage(\r
+    _('Choose language') + ' ' + _('for export'),\r
+    FLang, lang) then Exit;\r
+\r
+  if (sdOptional.InitialDir = '') then\r
+    GetDir(0, init_dir);\r
+\r
+  sdOptional.InitialDir := init_dir;\r
+  sdOptional.FileName := file_name;\r
+\r
+  if not(sdOptional.Execute) then Exit;\r
+\r
+  init_dir := sdOptional.InitialDir;\r
+  file_name := sdOptional.FileName;\r
+  \r
+  curr_lang := GetCurrentLanguage;\r
+  try\r
+\r
+    UseLanguage(lang);\r
+\r
+    f := TFileStream.Create(sdOptional.FileName, fmCreate);\r
+    try\r
+\r
+      UniWriteLn(f, Format('code,en,%s', [lang]));\r
+\r
+      _line('options:-w', 'Process waypoint information');\r
+      _line('options:-r', 'Process route information');\r
+      _line('options:-t', 'Process track information');\r
+\r
+      _line('options:-s', 'Synthesize shortnames');\r
+      _line('options:-c', 'Character set for next operation');\r
+\r
+\r
+      for i := 0 to FCaps.Count - 1 do\r
+      begin\r
+        if not FCaps.IsFile(i) then Continue;\r
+\r
+        s := FCaps.GetDescr(i);\r
+        UniWrite(f, Format('format:%s,', [FCaps.GetName(s)]));\r
+        UniWriteLn(f, '"' + s + '","' + _translate(GPSBabel_Domain, s) + '"');\r
+\r
+        l := FOpts.FormatOpts(s);\r
+        if (l = nil) then Continue;\r
+\r
+        for j := 0 to l.Count - 1 do\r
+        begin\r
+          o := Pointer(l.Objects[j]);\r
+          UniWrite(f, Format('format:%s:%s,', [o.format, o.name]));\r
+          UniWriteLn(f, '"' + o.hint + '","' + _translate(GPSBabel_Domain, o.hint) + '"');\r
+        end;\r
+      end;\r
+\r
+    finally\r
+      f.Free;\r
+    end;\r
+\r
+  finally\r
+    UseLanguage(curr_lang);\r
+  end;\r
+end;\r
+\r
+procedure TfrmMain.cbOutputDeviceChange(Sender: TObject);\r
+begin\r
+  CheckInput;\r
+end;\r
+\r
+procedure TfrmMain.cbInputDeviceChange(Sender: TObject);\r
+begin\r
+  CheckInput;\r
+end;\r
+\r
 end.\r